home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.xml;
-
- import com.extensibility.util.Debug;
- import java.util.Enumeration;
-
- public class DDMLWriter$ElemProxy extends DDMLWriter.DeclProxy {
- // $FF: synthetic field
- final DDMLWriter this$0;
- ElementDeclaration decl;
- DDMLWriter.AttrProxy attrProxy;
-
- DDMLWriter$ElemProxy(DDMLWriter var1) {
- super((DDMLWriter)null);
- this.this$0 = var1;
- this.attrProxy = new DDMLWriter.AttrProxy(this.this$0);
- }
-
- DDMLWriter$ElemProxy(DDMLWriter var1, ElementDeclaration var2) {
- super((DDMLWriter)null);
- this.this$0 = var1;
- this.attrProxy = new DDMLWriter.AttrProxy(this.this$0);
- this.setDecl(var2);
- }
-
- void setDecl(ElementDeclaration var1) {
- this.decl = var1;
- super.setDecl(var1);
- }
-
- String getFrequency(char var1) {
- if (var1 == '?') {
- return "Optional";
- } else if (var1 == '+') {
- return "OneOrMore";
- } else if (var1 == '*') {
- return "ZeroOrMore";
- } else {
- Debug.assert(false, "unknown occ char");
- return "";
- }
- }
-
- public void write(SXE var1, boolean var2) {
- var1.writeElem("ElementDecl");
- ((DDMLWriter.DeclProxy)this).writeNameAttr(var1);
- ((DDMLWriter.DeclProxy)this).writeMore(var1, this.decl.getDataType());
- if (var2) {
- ((DDMLWriter.DeclProxy)this).writeComments(var1);
- }
-
- ContentModel var3 = this.decl.getEffectiveModel();
- var1.writeElem("Model", -1);
- this.writeModel(var1, var3);
- var1.flush("Model");
- Enumeration var4 = this.decl.getAttributes(true);
- if (var4.hasMoreElements()) {
- var1.writeElem("AttGroup", -1);
-
- while(var4.hasMoreElements()) {
- AttributeDeclaration var5 = (AttributeDeclaration)var4.nextElement();
- this.attrProxy.setDecl(var5);
- this.attrProxy.writeType(var1, var2);
- }
-
- var1.flush("AttGroup");
- }
-
- var1.flush("ElementType");
- }
-
- void writeRef(SXE var1, String var2, char var3) {
- var1.writeElem("Ref", -1);
- String var4 = DTDUtilities.extractUnqualifiedName(var2);
- String var5 = DTDUtilities.extractPrefix(var2);
- var1.writeAttr("Element", var4);
- if (var5.length() > 0) {
- var1.writeAttr("ElementNS", String.valueOf("URI for prefix ").concat(String.valueOf(var5)));
- }
-
- if (var3 != 0) {
- var1.writeAttr("Frequency", this.getFrequency(var3));
- }
-
- var1.flush("Ref");
- }
-
- void writeTerm(SXE var1, ContentModelTerm var2) {
- if (var2 instanceof ContentModel) {
- ContentModelTermEnum var3 = var2.getTerms(true);
-
- while(var3.hasMoreElements()) {
- this.writeTerm(var1, (ContentModelTerm)var3.nextElement());
- }
- } else if (!var2.isGroup()) {
- this.writeRef(var1, var2.getTerm(), var2.getOccurance());
- } else {
- String var5 = var2.getChildConnection() == '|' ? "Choice" : "Seq";
- var1.writeElem(var5, -1);
- if (var2.getOccurance() != 0) {
- var1.writeAttr("Frequency", this.getFrequency(var2.getOccurance()));
- }
-
- ContentModelTermEnum var4 = var2.getTerms(true);
-
- while(var4.hasMoreElements()) {
- this.writeTerm(var1, (ContentModelTerm)var4.nextElement());
- }
-
- var1.flush(var5);
- }
-
- }
-
- void writeModel(SXE var1, ContentModel var2) {
- if (var2.isAny()) {
- var1.writeElem("Any", true);
- } else if (var2.isEmpty()) {
- var1.writeElem("Empty", true);
- } else if (var2.isTextOnly()) {
- var1.writeElem("PCData", true);
- } else if (var2.isTagsOnly()) {
- this.writeTerm(var1, var2);
- } else if (var2.isMixed()) {
- var1.writeElem("Mixed", -1);
- ContentModelTermEnum var3 = ((ContentModelTerm)var2).getLeafTerms();
-
- while(var3.hasMoreElements()) {
- ContentModelTerm var4 = var3.nextContentModelTerm();
- CMTReferent var5 = var4.getReferent();
- if (var5 instanceof ElementDeclaration) {
- this.writeRef(var1, var4.getTerm(), '\u0000');
- }
- }
- }
-
- }
- }
-